package HomeWork.Chapter04;

/**
 * Enjoy programming!!!
 * Time: 2021/11/29 -  10:44
 */
//栈（Stack）是一种以“后进先出”的方式存放数据的数据结构。设计实现一个简单的栈来存放整型，完成如下功能：
//
//        方法 功能 StackOfIntegers() 构建一个默认容量为16的空栈
//        StackOfIntegers(capacity: int) 构建一个指定容量的空栈
//        empty(): boolean 如果栈为空则返回true
//        peek():int 返回栈顶的整数而不从栈中删除该数
//        push(value: int): void 将一个整数存储到栈顶
//        pop(): int 删除栈顶整数并返回它
//        getSize(): int 返回栈中元素的个数
import java.util.Scanner;

public class Stack_ {

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        int l = input.nextInt();//22
        int first = input.nextInt();//49
        input.close();

        StackOfIntegers stack1 = new StackOfIntegers();
        StackOfIntegers stack = new StackOfIntegers(l);

        stack1.push(first);


        System.out.println(stack1.getsize() + " " + stack1.peek());

        for( int i = 0; i < l; i++)
            stack.push(i);

        while(!stack.empty())
            System.out.print(stack.pop() + " ");
    }

//16 49
//        21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
}
class StackOfIntegers{
    private int size;
    private int top;
    private int[] contain;
    public StackOfIntegers(){
        size = 16;
        contain = new int[16];
    }
    public StackOfIntegers(int i){
        size = i;
        contain = new int[size];
        top = -1;//这里用-1来初始化top是为了方便push时，不改变顶层数；这样一来，peek才不会去访问顶层+1层数，
        //而且pop不会越界访问，注意empty条件改成-1，因为-1时才真正空。

    }
    public void push(int i){
        if (top < size){
            contain[++top] = i;
        }
    }

    public int getsize(){
        return size;
    }
    public int peek(){
        return contain[top];
    }
    public boolean empty(){
        return top == -1;
    }
    public int pop(){
        return contain[top--];
    }

}
